import java.io.File;
import java.util.Scanner;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: wx
 * Date: 2024-03-11
 * Time: 21:42
 */


//查找硬盘上的文件位置
// 给定一个文件名,去指定的目录中进行搜索
// 找到文件名匹配的结果,并打印出完整的路径.

public class IODemo13 {
    public static void main(String[] args) {
        //1.输入必要信息
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入要搜索的文件名: ");
        String fileName = scanner.next();
        System.out.println("请输入要搜索的目录: ");
        String rootPath = scanner.next();
        File rootFile = new File(rootPath);
        //判定rootFile是不是目录
        if (!rootFile.isDirectory()) {
            System.out.println("输入路径有误!");
        }

        //2.有了搜索路径之后,就可以按照 递归 的方式来进行搜索
        //文件系统的目录结构是"树形结构"
        // 既然是搜索,就会涉及 遍历
        // 针对树的遍历,一般都是要借助递归的
        //
        // 此处的递归比二叉树更复杂一点 目录中有几个子目录,就递归几次

        //需要知道递归的起点,还需要知道要查询的文件名
        // 进行递归,就是要进行树的遍历
        // 把目录中,以及其中子目录,所有文件都要遍历,是否有符合要求的
        scanDir(rootFile,fileName);

    }
    private static void scanDir(File rootFile, String filename){
        //1.当前目录中的文件和子目录都列出来
         File[] files = rootFile.listFiles();
        if (files == null) {
            // 1.空目录直接返回
            return;
        }
        // 2.遍历上述 files, 判定每一个 file 是目录还是文件
        for (File f : files) {
            if (f.isFile()) {
                //普通文件,判定文件名是否是搜索的文件
                if (filename.equals(f.getName())) {
                    System.out.println("找到了符合要求的文件! " + f.getAbsolutePath());
                }
            } else if (f.isDirectory()) {
                //文件目录,需要进一步递归
                scanDir(f,filename);
            }else {
                ;
            }
        }
    }
}
